def I():
return input()
def II():
return int(input())
def MI():
return map(int, input().split())
def LI():
return list(input().split())
def LII():
return list(map(int, input().split()))
def GMI():
return map(lambda x: int(x) - 1, input().split())
def LGMI():
return list(map(lambda x: int(x) - 1, input().split()))
from collections import Counter, defaultdict, deque
from heapq import nsmallest, nlargest, heapify, heappop, heappush
def main():
n, k = LII()
ids = LGMI()
next_pos = [n] * n
pos = [n] * n
for i in range(n - 1, -1, -1):
next_pos[i] = pos[ids[i]]
pos[ids[i]] = i
hpq = []
cnt = 0
vis = [0] * n
ans = 0
for i in range(n):
while hpq and vis[hpq[0] % n] == 0:
heappop(hpq)
if vis[ids[i]] == 0:
if cnt == k:
vis[heappop(hpq) % n] = 0
cnt -= 1
vis[ids[i]] = 1
heappush(hpq, -next_pos[i] * n + ids[i])
cnt += 1
ans += 1
heappush(hpq, -next_pos[i] * n + ids[i])
print(ans)
main()
136. Single Number | 169. Majority Element |
119. Pascal's Triangle II | 409. Longest Palindrome |
1574A - Regular Bracket Sequences | 1574B - Combinatorics Homework |
1567A - Domino Disaster | 1593A - Elections |
1607A - Linear Keyboard | EQUALCOIN Equal Coins |
XOREQN Xor Equation | MAKEPAL Weird Palindrome Making |
HILLSEQ Hill Sequence | MAXBRIDGE Maximise the bridges |
WLDRPL Wildcard Replacement | 1221. Split a String in Balanced Strings |
1002. Find Common Characters | 1602A - Two Subsequences |
1555A - PizzaForces | 1607B - Odd Grasshopper |
1084A - The Fair Nut and Elevator | 1440B - Sum of Medians |
1032A - Kitchen Utensils | 1501B - Napoleon Cake |
1584B - Coloring Rectangles | 1562B - Scenes From a Memory |
1521A - Nastia and Nearly Good Numbers | 208. Implement Trie |
1605B - Reverse Sort | 1607C - Minimum Extraction |